package data_structure.tree.arrBinaryTree;

/**
 * @ClassName : data_structure.tree.ArrBinaryTree
 * @Description : 类描述
 * Created by cyd on 2021-03-15 21:06:25
 */
public class ArrBinaryTreeDemo {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5, 6, 7};
        ArrBinaryTree arrBinaryTree = new ArrBinaryTree(arr);
        arrBinaryTree.preOrder();

    }
}

/**
 * 实现顺序存储二叉树的遍历
 */
class ArrBinaryTree {
    // 存储节点数据的数组
    private final int[] arr;

    public ArrBinaryTree(int[] arr) {
        this.arr = arr;
    }

    /**
     * 用于完成顺序存储二叉树
     * 采用前序遍历的方式
     *
     * @param index:数组的下标
     */
    public void preOrder(int index) {
        if (arr.length == 0) {
            throw new RuntimeException("二叉树为空");
        }
        if (index >= arr.length) {
            throw new RuntimeException("超出范围");
        }
        System.out.print(arr[index] + " ");

        if (2 * index + 1 < arr.length) {
            preOrder(2 * index + 1);
        }

        if (2 * index + 2 < arr.length) {
            preOrder(2 * index + 2);
        }
    }

    /**
     * 重载方法，使其简捷，不易因参数而犯错
     */
    public void preOrder() {
        preOrder(0);
    }

}